
	var cheminPages = 'views/';
	var cheminModels = 'models/';
	var cheminControllers = 'controllers/';
	var cheminFactory = 'factory/';
	var cheminConstantes = 'constantes/';

	angular.module('eYe',['ngRoute'])

	.config(function($routeProvider) {
	
		var isLoggedIn = ['$q','$route' ,'$rootScope', 'Connexion', 'DataBase', 'Popup', 'Historique', 'Cache',
			function($q, $route, $rootScope, Connexion, DataBase, Popup, Historique, Cache) {
							
				var deferred = $q.defer();
				
				function verif(){

					DataBase.init(function(){	
					
						if((Connexion.invite) && (!$route.current.data.allowGuest)){
													
							var config = {
								typePopup:'autre',
								message:'Vous ne pouvez pas accèder à cette page en tant qu\'invité.<br><br>Voulez-vous vous connecter ?',
								btn_fermer:false,
								btn_oui_non:true,
								fonctionReponse:function(reponse){
									if(reponse){									
										deferred.reject({ needsAuthentication: true });									
									}
									else{
										Historique.back();
									}
								}
							};
							
							Popup.afficherPopup(config);
							
						}
						else{
						
							$.when(Connexion.verifierConnexion()).then(function(estConnecte){
								
								if(estConnecte){									
									deferred.resolve();						
								}	
								else{
									deferred.reject({ needsAuthentication: true });						
								}

							});	
						}						
					});					

				}

				if(Cache.statut == 1){
					verif();
				}
				else{
					$('#container').on('cache_load',verif);
				}
				

				return deferred.promise;
			}
		];

		$routeProvider.whenAuthenticated = function(path, route){			
			route.resolve = route.resolve || {};
			angular.extend(route.resolve, { isLoggedIn: isLoggedIn });			
			return $routeProvider.when(path, route);
		};
			
		var initDB = ['$q', '$rootScope', 'DataBase', 'Cache',
			function($q, $rootScope, DataBase, Cache) {
				var deferred = $q.defer();				
				function init(){				
					DataBase.init(function(){
						deferred.resolve();	
					});					
				}

				if(Cache.statut == 1){
					init();
				}
				else{
					$('#container').on('cache_load',init);
				}

				return deferred.promise;
			}
		];

		$routeProvider.whenInit = function(path, route){			
			route.resolve = route.resolve || {};
			angular.extend(route.resolve, { initDB: initDB });			
			return $routeProvider.when(path, route);
		};

		/*
			Pour les pages avec verification de la connexion mettre : whenAuthenticated
			Pour les autres mettre : whenInit
		*/
	
		$routeProvider		
			.whenInit('/', {
				controller:'AccueilController',
				templateUrl:cheminPages+'accueil.html'
			})
			.whenInit('/apropos', {
				controller:'AproposController',
				templateUrl:cheminPages+'apropos.html'
			})
			.whenAuthenticated('/theme', {
				controller:'ThemesController',
				templateUrl:cheminPages+'themes.html',
				data:{
					allowGuest : true
				}
			})
			.whenAuthenticated('/theme/:themeId', {
				controller:'ThemesController',
				templateUrl:cheminPages+'themes.html',
				data:{
					allowGuest : true
				}
			})
			.whenAuthenticated('/qcm/:qcmId', {
				controller:'QcmController',
				templateUrl:cheminPages+'qcm.html',
				data:{
					allowGuest : true
				}
			}) 
			.whenInit('/inscription', {
				controller:'InscriptionController',
				templateUrl:cheminPages+'inscription.html'
			})		
			.whenAuthenticated('/statistiques', {
				controller:'StatistiquesController',
				templateUrl:cheminPages+'statistiques.html',
				data:{
					allowGuest : false
				}
			})		
			.whenAuthenticated('/contact', {
				controller:'ContactController',
				templateUrl:cheminPages+'contact.html',
				data:{
					allowGuest : false
				}
			})	
			.whenAuthenticated('/contact/:formulaireId/qcm/:qcmId', {
				controller:'ContactController',
				templateUrl:cheminPages+'contact.html',
				data:{
					allowGuest : false
				}
			})
			.whenAuthenticated('/options', {
				controller:'OptionsController',
				templateUrl:cheminPages+'options.html',
				data:{
					allowGuest : true
				}
			})
			.whenAuthenticated('/recherche', {
				controller:'RechercheController',
				templateUrl:cheminPages+'recherche.html',
				data:{
					allowGuest : true
				}
			})
			.otherwise({
				redirectTo:'/'
			});
	})
	
	.run(function ($location, $rootScope, Connexion, Historique, DataBase, Cache) {
		
		Cache.mettreAJour();

		$rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {
			if (rejection && rejection.needsAuthentication === true) {
				Connexion.typeCompte('non_connecte');				
				Connexion.afficherConnexion(0);
			}
		 });
		
		$rootScope.$on('$locationChangeStart', function (event, newUrl, oldUrl) {		
								
			if($('#menu_bootstrap').hasClass('in')){
				$('#btn_menu_bootstrap').click();
			}				

			Connexion.afficherCacheConnexion();

			var dateActuelle = new Date();
			var dateDerniereAction = new Date();					
			dateDerniereAction.setTime(utilisateurActuel.date_derniere_action);
			
			var diffDate = dateDiff(dateDerniereAction,dateActuelle);				
		
			if((typeof utilisateurActuel.est_connecte !== 'undefined') && ((utilisateurActuel.est_connecte) && (diffDate.min <= Connexion.tempsMaxConnexion))){
				Connexion.typeCompte('connecte');	
			}
			else if(Connexion.invite){
				Connexion.typeCompte('invite');
				utilisateurActuel = {};
			}
			else{
				Connexion.typeCompte('non_connecte');	
				utilisateurActuel = {};
			}	

			$rootScope.url_connexion = '';

			Historique.add(oldUrl,newUrl);			
			if(Historique.get().length > 0){
				$('#btn_retour').css('display','inline-block');
			}
			else{
				$('#btn_retour').hide();
			}			

		});		
		
	});


	/* Ajout des constantes */	
	var fichierConstantes = 'constantes';
	if(document.location.hostname == "localhost"){
		fichierConstantes = fichierConstantes + '_dev';
	}
	
	$.ajax({
		url:'./'+cheminConstantes+fichierConstantes+'.js',
		type:'GET',
		async:false,
		success:function(data){
			var s = document.createElement('script');
		    s.type = 'text/javascript';
		    s.innerHTML = data;
		   $('head').append(s);
		}
	 });



		